import Store from '@/store'
import Utils from '@/utils/utils'

// 路由全局管理，全局拦截
// 保留当前页面，跳转到应用内的某个页面，使用uni.navigateBack可以返回到原页面
// url：要跳转的页面地址，querys：是否携带参数（格式：?key=value&key1=value1）
export const navigateTo = (url, querys) => {
	if (typeof routerBeforeEach(url) === 'string' && routerBeforeEach(url) !== '') {
		uni.navigateTo({ url: url + (querys ? querys : '') })
	}
}

// 关闭当前页面，跳转到应用内的某个页面
// url：要跳转的页面地址，querys：是否携带参数（格式：?key=value&key1=value1）
export const redirectTo = (url, querys) => {
	if (typeof routerBeforeEach(url) === 'string' && routerBeforeEach(url) !== '') {
		uni.redirectTo({ url: url + (querys ? querys : '') })
	}
}

// 关闭所有页面，打开到应用内的某个页面
// url：要跳转的页面地址，querys：是否携带参数（格式：?key=value&key1=value1）
export const reLaunch = (url, querys) => {
	if (typeof routerBeforeEach(url) === 'string' && routerBeforeEach(url) !== '') {
		uni.reLaunch({ url: url + (querys ? querys : '') })
	}
}

// 跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面
// url：要跳转的页面地址，不能携带参数
export const switchTab = (url) => {
	if (typeof routerBeforeEach(url) === 'string' && routerBeforeEach(url) !== '') {
		uni.switchTab({ url })
	}
}

// 关闭当前页面，返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈，决定需要返回几层。
// url：要跳转的页面地址，delta 返回的页面数，默认 1， 如果 delta 大于现有页面数，则返回到首页
export const navigateBack = (url, delta = 1) => {
	if (typeof routerBeforeEach(url) === 'string' && routerBeforeEach(url) !== '') {
		uni.navigateBack({ delta })
	}
}

// 检测页面跳转是否可通过
const routerBeforeEach = (url) => {
	let isLogin = Store.state.user.isLogin
	let noAuthUrls = Store.state.user.noAuthUrls
	let mobile = Store.state.user.mobile
	
	// 判断是否是开放的页面
	if (noAuthUrls.indexOf(url) !== -1) {
		if (isLogin) {
			Utils.popUpMsg('error', '您已登录！', 1500)
			return false
		}
		
		// 如果 url 要跳转的页面是输入验证码页面
		if (url === '/pages/captch/captch') {
			// 需要判断手机号是否存在（即，手机号验证是否通过，存在表示通过且已发送短信）
			if (mobile) {
				return url
			}
			
			Utils.popUpMsg('none', '无访问权限，请先获取短信，通过验证！', 3000)
			return false
		}
		
		return url
	} else {
		// 不是放开的公共页面，需要登录验证，判断是否已经登录
		if (!isLogin) {
			Utils.popUpMsg('error', '请登录！', 1500)
			return '/pages/login/login'
		}
		
		return url
	}
}

